package com.sjz.bookmark.util;

import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;

@Slf4j
public class ThreadLocalUtils {

    // 使用 ThreadLocal 来存储每个线程的开始时间
    private static final ThreadLocal<Map<String, Long>> timeThreadLocal = ThreadLocal.withInitial(HashMap::new);

    /**
     * 记录开始时间
     *
     * @param id 方法或任务的唯一标识
     */
    public static void startTime(String id) {
        Map<String, Long> timeMap = timeThreadLocal.get();
        timeMap.put(id, System.currentTimeMillis());
    }

    /**
     * 记录结束时间并输出执行时间
     *
     * @param id 方法或任务的唯一标识
     */
    public static void endTime(String id) {
        Map<String, Long> timeMap = timeThreadLocal.get();
        Long startTime = timeMap.get(id);
        if (startTime != null) {
            long endTime = System.currentTimeMillis();
            long executionTime = endTime - startTime;
            System.out.println(id + " 执行时间: " + executionTime + " 毫秒");
            // 清除当前线程的 ThreadLocal 数据
            timeMap.remove(id);
        } else {
            System.out.println(id + " 开始时间记录不存在");
        }
    }

    public void test() {
        startTime("测试方法");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        endTime("测试方法");
    }
}